<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Js 数字</title>
    <script>
        var pi = 3.14;
        var x = 34;
        // 极大的数字 或者 极小是数字 可以试用 科学计数法来表示
        var y = 123e5;  //  123 00000
        var z = 123e-5; // 0.00123  
        
       /*
       所有 JavaScript 数字均为 64 位
       JavaScript 不是类型语言。与许多其他编程语言不同，JavaScript 不定义不同类型的数字，
       比如整数、短、长、浮点等等。
       JavaScript 中的所有数字都存储为根为 10 的 64 位（8 比特），浮点数。
       精度
       整数（不使用小数点或指数计数法）最多为 15 位。
       小数的最大位数是 17，但是浮点运算并不总是 100% 准确：
       */
        var m = 0.2 + 0.1;
        function testJsNumberPrecision(){
            var  x;
            document.write("<p> 只有17位")
            x = 12345678901234567890   // 这是一个 20位的整数
            document.write(x + "</p>")  

            document.write("<p>0.2 + 0.1 = ");
            x=0.2+0.1;
            document.write(x + "</p>");

            document.write("<p>可分别乘以 10 并除以 10 : ");
            x=(0.2*10+0.1*10)/10;
            document.write(x +"</p>");

        }
        
        /*
        属性	描述
        constructor	返回对创建此对象的 Number 函数的引用。
        MAX_VALUE	可表示的最大的数。
        MIN_VALUE	可表示的最小的数。
        NaN	非数字值。
        NEGATIVE_INFINITY	负无穷大，溢出时返回该值。
        POSITIVE_INFINITY	正无穷大，溢出时返回该值。
        prototype	使您有能力向对象添加属性和方法。
        
        方法	描述
        toString	把数字转换为字符串，使用指定的基数。
        toLocaleString	把数字转换为字符串，使用本地数字格式顺序。
        toFixed	把数字转换为字符串，结果的小数点后有指定位数的数字。
        toExponential	把对象的值转换为指数计数法。
        toPrecision	把数字格式化为指定的长度。
        valueOf	返回一个 Number 对象的基本数字值。
        */
        // 测试数字的属性和方法
        function testNumberPropertyMethod(){
            // 
            var big = Number.MAX_VALUE;
            console.log("测试数字的最大值" + big);

            var n = new Number(2);
            var nBig = n.MAX_VALUE;  // 对比测验一下 这是一种错误的写法
            console.log("测试数字的最大值" + nBig); // 这个是 undifiende 

            var n = 123;
            var binary_value = n.toString(2); // 按照二进制转换 
            console.log("to string value is:" + binary_value);
            
            var ten_value = n.toString(10)  // 按照十进制转换
            console.log("to ten value is:" + ten_value);
            
        }


    </script>
</head>
<body>
    <button onclick="testJsNumberPrecision()">测试数字精度测试</button>
    <button onclick="testNumberPropertyMethod()">测试数字的转换</button>
</body>
</html>